LeetCode 5 最长回文子串 Python解题记录 您所在的位置:网站首页 最长回文字符串 python LeetCode 5 最长回文子串 Python解题记录

LeetCode 5 最长回文子串 Python解题记录

#LeetCode 5 最长回文子串 Python解题记录| 来源: 网络整理| 查看: 265

我们在该专栏中记录了我俩的刷题记录。我们更新的所有题目都在目录中。今天的题目是5. 最长回文子串

题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:动态规划--区间型 特点: 给定一个序列/字符串,进行一些操作,最后一步会将序列/字符串去头/尾,剩下的会是一个区间[i,j] 状态自然定义为 f[i][j],表示面对子序列[i, ..., j]时的最优性质. 区间型动态规划的标志是要求区间内满足一定条件的最大长度等等,要通过由内往外扩散去做, 通常是按照区间的长度从小往大去遍历,比如区间长度为1,扩散到区间长度为2,...,一直往外扩 规律: 区间型 的数组都是2维的 要按照长度 j-i 从小到大的顺序计算

- 状态:f[i][j] 表示从 i 到 j 的回文串长度 - 转移: -- 1、i==j:dp[i][j]=True -- 2、只有两个字母,s[i]==s[j]:dp[i][j]=True -- 3、首尾相等,并且去掉首尾的内部也是回文串:s[i]==s[j] and dp[i+1][j-1]==True : dp[i][j] = True代码class Solution: def longestPalindrome(self, s: str) -> str: N = len(s) dp = [[False]*N for _ in range(N)] res = '' if not s: return '' if N == 1: return s for k in range(N): i, j = 0, k while j < N: # 条件1 if i == j: dp[i][j] = True # 条件2 elif j-i==1 and s[i] == s[j]: dp[i][j] = True # 条件3,首位相同,并且去掉首位内部也是回文串 elif s[i] == s[j] and dp[i+1][j-1]: dp[i][j] = True if dp[i][j] and len(res) < (j-i+1): res = s[i:j+1] i += 1 j += 1 return res



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有